package com.qezhhnjy.huawei.topic2;

import java.util.Scanner;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

/**
 * @author qezhhnjy
 * @date 2021/6/20-23:24
 * 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。
 * 例如，当输入5时，应该输出的三角形为：
 * 1 3 6 10 15
 * 2 5 9 14
 * 4 8 13
 * 7 12
 * 11
 * 请注意本题含有多组样例输入。
 * 输入描述：
 * 输入正整数N（N不大于100）
 * 输出描述：
 * 输出一个N行的蛇形矩阵。
 * 示例1
 * 输入：
 * 4
 * 输出：
 * 1 3 6 10
 * 2 5 9
 * 4 8
 * 7
 */
public class Topic34 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            int size = in.nextInt();
            int[][] result = new int[size][size];
            for (int i = 0; i < size; i++) {
                add(result, i);
            }
            for (int[] a : result) {
                System.out.println(IntStream.of(a).filter(n -> n != 0).mapToObj(String::valueOf).collect(Collectors.joining(" ")));
            }
        }
    }

    private static void add(int[][] data, int i) {
        int[] row = data[i];
        if (i == 0) {
            row[0] = 1;
            for (int j = 1; j < data.length - i; j++) {
                row[j] = row[j - 1] + j + 1;
            }
        } else {
            for (int j = 0; j < data.length - i; j++) {
                row[j] = data[i - 1][j] + i + j;
            }
        }
    }
}
